/***********************************************************************************
 @file   
 @author
 @attention
 ***********************************************************************************/
#ifndef _SLAVE_COM_DATA_H
#define _SLAVE_COM_DATA_H
/* Private includes ----------------------------------------------------------*/
#include "main.h"
/* Private define ------------------------------------------------------------*/
#define sysVER_MONTH ( \
      __DATE__[0] == 'J' ? (__DATE__[1] == 'a' ? 1 : (__DATE__[2] == 'n' ? 6 : 7)) /* Jan, Jun, Jul */ \
    : __DATE__[0] == 'F' ? 2 /* Feb */ \
    : __DATE__[0] == 'M' ? (__DATE__[2] == 'r' ? 3 : 5) /* Mar, May */ \
    : __DATE__[0] == 'A' ? (__DATE__[1] == 'p' ? 4 : 8) /* Apr, Aug */ \
    : __DATE__[0] == 'S' ? 9 /* Sep */ \
    : __DATE__[0] == 'O' ? 10 /* Oct */ \
    : __DATE__[0] == 'N' ? 11 /* Nov */ \
    : __DATE__[0] == 'D' ? 12 /* Dec */ \
    : 0 /* 默认值,避免未匹配 */ \
)
#define sysVER_DAY     ((__DATE__ [4] == ' ' ? 0 : __DATE__ [4] - '0') * 10 + (__DATE__ [5] - '0'))
#define SOFT_VER       (70000+sysVER_MONTH*100+sysVER_DAY)       //软件版本号

#define LL_ALM   0 //低低报
#define L_ALM    1 //低报
#define H_ALM    2 //高报
#define HH_ALM   3 //高高报

#if (SENSOR_MODE==SENSOR_BURN)//-------------------------初始化可燃传感器数据lel
/* 传感器警告值初始化*/
#define SENSOR_ALM_L                20
#define SENSOR_ALM_H                50
/* 传感器跨度1初始化*/
#define SENSOR_KUADU1_VAL_INIT      40
#define SENSOR_KUADU1_ADC_INIT      1200
/* 传感器零点初始化*/
#define SENSOR_ZERO_INIT            550
/* 传感器单位初始化*/
#define SENSOR_UNIT_INIT            1
/* 传感器名称初始化*/
#define SENSOR_GAS_TYPE             2
/* 传感器精度初始化*/
#define SENSOR_PREC_INIT            1
/* 传感器浓度范围初始化*/
#define SENSOR_RANGE_INIT           100
#elif (SENSOR_MODE==SENSOR_O2)//-------------------------初始化氧气传感器数据 vol
/* 传感器警告值初始化*/
#define SENSOR_ALM_L                195
#define SENSOR_ALM_H                235
/* 传感器跨度1初始化*/
#define SENSOR_KUADU1_VAL_INIT      209
#define SENSOR_KUADU1_ADC_INIT      1000
/* 传感器零点初始化*/
#define SENSOR_ZERO_INIT            50
/* 传感器单位初始化*/
#define SENSOR_UNIT_INIT            3
/* 传感器名称初始化*/
#define SENSOR_GAS_TYPE             7
/* 传感器精度初始化*/
#define SENSOR_PREC_INIT            10
/* 传感器浓度范围初始化*/
#define SENSOR_RANGE_INIT           300
#elif (SENSOR_MODE==SENSOR_TOXIC)//-------------------------初始化有毒传感器数据ppm
/* 传感器警告值初始化*/
#define SENSOR_ALM_L                100
#define SENSOR_ALM_H                200
/* 传感器跨度1初始化*/
#define SENSOR_KUADU1_VAL_INIT      300
#define SENSOR_KUADU1_ADC_INIT      1200
/* 传感器零点初始化*/
#define SENSOR_ZERO_INIT            15
/* 传感器单位初始化*/
#define SENSOR_UNIT_INIT            2
/* 传感器名称初始化*/
#define SENSOR_GAS_TYPE             6
/* 传感器精度初始化*/
#define SENSOR_PREC_INIT            1
/* 传感器浓度范围初始化*/
#define SENSOR_RANGE_INIT           1000
#elif (SENSOR_MODE==SENSOR_C4H)//-------------------------初始化激光甲烷
/* 传感器警告值初始化*/
#define SENSOR_ALM_L                20
#define SENSOR_ALM_H                50
/* 传感器跨度1初始化*/
#define SENSOR_KUADU1_VAL_INIT      40
#define SENSOR_KUADU1_ADC_INIT      1000
/* 传感器零点初始化*/
#define SENSOR_ZERO_INIT            0
/* 传感器单位初始化*/
#define SENSOR_UNIT_INIT            3
/* 传感器名称初始化*/
#define SENSOR_GAS_TYPE             3
/* 传感器精度初始化*/
#define SENSOR_PREC_INIT            100
/* 传感器浓度范围初始化*/
#define SENSOR_RANGE_INIT           100
#else
/* 传感器警告值初始化*/
#define SENSOR_ALM_L                15
#define SENSOR_ALM_H                20
/* 传感器跨度1初始化*/
#define SENSOR_KUADU1_VAL_INIT      40
#define SENSOR_KUADU1_ADC_INIT      1000
/* 传感器零点初始化*/
#define SENSOR_ZERO_INIT            0
/* 传感器单位初始化*/
#define SENSOR_UNIT_INIT            1
/* 传感器名称初始化*/
#define SENSOR_GAS_TYPE             1
/* 传感器精度初始化*/
#define SENSOR_PREC_INIT            1
/* 传感器浓度范围初始化*/
#define SENSOR_RANGE_INIT           100

#endif

/*电池类配置------------------------------------------------------------*/
//#define ONCE_BATTERY

#if defined ONCE_BATTERY
#define ENERGY_FULL  3600
#define ENERGY_DISPLAY 0
#else
#define ENERGY_FULL  4000
#define ENERGY_DISPLAY 1
#endif
/* Private typedef -----------------------------------------------------------*/
#pragma         pack(1) 
typedef  struct
{
    uint8_t  df_addr;                              //差分线地址（探头地址）
    uint8_t  heat_time;	                           //开机预热时间 sec
    uint8_t  relay_mode;                           //继电器控制模式
    uint16_t head_type;                            //通讯包头 
    uint32_t soft_ver;                             //软件版本                        
    uint8_t  mute;                                 //静音标志 //0-正常不显示状态, 1-正在报警状态, 2-报警被静音状态 
    uint8_t  bat;                                  //4节电池电量显示// 0-无电池不显示,1-4 有电池并显示几节电量
    uint8_t  wave;                                 //lora/4G发包提示,用于主界面显示流量标志   
    uint16_t host_adr[5];                          //主机地址   
}_dev_system_obj;

typedef struct 
{
    uint8_t  mb_addr;					         //modbus地址（传感器地址）   
    uint8_t  gas_type;							 //气体名称
    uint8_t  negative;							 //负电流标志
    uint8_t  alarmer_type;                       //报警方式
    uint8_t  precision;                          //精度
    uint8_t  mode;                               //传感器模式 1-可燃模式，2-氧气模式 3-一氧化碳模式
    uint32_t value;                              //浓度值
    uint8_t  unit;                               //单位 1-LEL，2-PPM，3-VOL
    uint8_t  state;                              //探测器状态 0-正常,1-低报,2-高报,3-故障,4-存储芯片故障  6测试
    uint8_t  tc;                                 //温度补偿标志
    uint32_t total_work_time;                    //传感器累计通电小时数
    uint32_t cali_after_time;                    //传感器预期寿命小时   
    
}_dev_sensor_obj;	

typedef struct 
{
    uint8_t  ch;				                //选择报警值传感器通道
    uint16_t alm_value[4];		                //报警值(低低报,低报,高报,高高报)
}_dev_alm_obj;	    

typedef  struct 
{ 
        uint16_t ntc;                     //ntc
        uint16_t opa;                     //传感器放大后adc数据
        uint16_t sensor;                  //传感器原始adc
    
        int16_t  dis_ntc;                 //显示温度
        uint16_t dis_data;                //显示浓度     
        int16_t  kuadu_val[3];  	      //跨度={KUADU,0,0}
        int16_t  kuadu_adc[3];            //跨度的ADC值={1200,0,0}
        uint16_t zero;                    //零值600
        uint16_t range;                   //量程=100//设置高低报范围
}_dev_adc_obj;


typedef  struct 
{ 
    uint8_t net_reset_time;            //网络复位时间
    uint8_t csq;                       //信号质量
    char    ccid[21];                  //SIM标识  通常19-20位数字
    char    imei[16];                  //设备标识 15位数字 + '\0'
    char    imsi[16];                  //用户标识 15位数字 + '\0'
}_dev_net_obj;
#pragma         pack()
/* Private variables ---------------------------------------------------------*/
extern _dev_system_obj dev_system_obj;
extern _dev_sensor_obj dev_sensor_obj;
extern _dev_alm_obj    dev_alm_obj;
extern _dev_adc_obj    dev_adc_obj;
extern _dev_net_obj    dev_net_obj;
/* Private function ----------------------------------------------------------*/

#endif
